//package com.siam.package_order.service;
//
//import com.wechat.pay.java.core.notification.NotificationParser;
//import com.wechat.pay.java.core.notification.RequestParam;
//import com.wechat.pay.java.service.transfer.model.TransferDetailEntity;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Service;
//
//@Service
//public class WxPayTransferCallbackService {
//
//    @Autowired
//    private NotificationParser notificationParser; // 微信支付官方SDK的解析器
//
//    /**
//     * 处理转账回调
//     */
//    public String handleCallback(String requestBody, String signature, String timestamp,
//                               String nonce, String serial) {
//
//        // 1. 构建验签参数
//        RequestParam requestParam = new RequestParam.Builder()
//                .serialNumber(serial)
//                .nonce(nonce)
//                .signature(signature)
//                .timestamp(timestamp)
//                .body(requestBody)
//                .build();
//
//        try {
//            // 2. 使用官方SDK验证签名并解密数据
//            TransferDetailEntity transferDetail = notificationParser.parse(requestParam, TransferDetailEntity.class);
//
//            // 3. 处理业务逻辑
//            return processTransferResult(transferDetail);
//
//        } catch (Exception e) {
//            // 验签失败或处理异常
//            log.error("处理微信转账回调失败", e);
//            return "FAIL";
//        }
//    }
//
//    /**
//     * 处理转账结果
//     */
//    private String processTransferResult(TransferDetailEntity transferDetail) {
//        String outDetailNo = transferDetail.getOutDetailNo(); // 商户系统内部明细单号
//        String status = transferDetail.getStatus();           // 转账状态
//
//        if ("SUCCESS".equals(status)) {
//            // 转账成功业务逻辑
//            log.info("转账成功，明细单号：{}", outDetailNo);
//            updateOrderStatus(outDetailNo, "SUCCESS");
//            return "SUCCESS";
//
//        } else if ("FAIL".equals(status)) {
//            // 转账失败业务逻辑
//            String failReason = transferDetail.getFailReason(); // 失败原因
//            log.warn("转账失败，单号：{}，原因：{}", outDetailNo, failReason);
//            updateOrderStatus(outDetailNo, "FAIL", failReason);
//            return "SUCCESS"; // 注意：即使业务失败也要返回SUCCESS表示已处理
//
//        } else {
//            // 其他状态处理
//            log.info("转账处理中，单号：{}", outDetailNo);
//            return "SUCCESS";
//        }
//    }
//
//    /**
//     * 更新订单状态（示例）
//     */
//    private void updateOrderStatus(String outDetailNo, String status) {
//        updateOrderStatus(outDetailNo, status, null);
//    }
//
//    private void updateOrderStatus(String outDetailNo, String status, String failReason) {
//        // 这里实现您的业务逻辑：更新数据库中的转账状态
//        // 1. 根据 outDetailNo 查找对应的提现记录
//        // 2. 更新状态为 status
//        // 3. 如果失败，记录失败原因 failReason
//        // 4. 可能还需要更新用户余额等相关业务
//    }
//}